import { z } from "zod";

// 验证用户ID为正整数
export const userIdSchema = z.object({
  userId: z
    .string()
    .refine(
      // 验证是否可以转换为整数
      (val) => {
        const num = parseInt(val, 10);
        return !isNaN(num) && Number.isInteger(num) && num.toString() === val;
      },
      { message: "id必须是有效的整数" }
    )
    // 转换为整数类型
    .transform((val) => parseInt(val, 10))
    .optional(),
});

// 定义验证参数和请求体的类型

export const idSchema = z.object({
  id: z
    .string()
    .refine(
      // 验证是否可以转换为整数
      (val) => {
        const num = parseInt(val, 10);
        return !isNaN(num) && Number.isInteger(num) && num.toString() === val;
      },
      { message: "id必须是有效的整数" }
    )
    // 转换为整数类型
    .transform((val) => parseInt(val, 10)),
});

export type IdDTO = z.infer<typeof idSchema>;

export const categoryIdSchema = z.object({
  categoryId: idSchema.shape.id,
});

export type CategoryIdDTO = z.infer<typeof categoryIdSchema>;

// 正则表达式：严格匹配 YYYY-MM-DD 格式
// 其中：
// - \d{4}：匹配4位年份（如2024）
// - (0[1-9]|1[0-2])：匹配01-12的月份
// - (0[1-9]|[12]\d|3[01])：匹配01-31的日期
export const dateSchema = z.object({
  date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, {
    message: "日期格式应为YYYY-MM-DD",
  }),
});

export type DateDTO = z.infer<typeof dateSchema>;
